//Grunt 的入口文件
//用于定义一些需要Grunt自动执行的任务
//需要导出一个函数 
//此函数接收一个grunt的形参，内部提供一此创建任务时可以乃至的API

// 实现这个项目的构建
const sass=require('sass')
const loadGruntTasks=require('load-grunt-tasks')
module.exports=grunt=>{
    //配置
    grunt.initConfig({
        pkg:grunt.file.readJSON('package.json'),
        clean:{//清除文件的配置选项
            dist:'dist/**'
        },
        sass:{//编译sass文件
            options:{//配置选项
                sourceMap:true,
                implementation:sass//指定sass模块来编译scss文件
            },
            main:{//目标
                files:{//输出样式文件路径:输入样式文件路径
                    'dist/css/main.css':'src/assets/styles/main.scss'
                }
            }

        },
        babel:{//编译es6+
            options:{
                presets:['@babel/preset-env'],
                sourceMap:true
            },
            main:{
                files:{//输出脚本文件路径:输入脚本文件路径
                    'temp/js/app.js':'src/assets/scripts/main.js'
                }
            }
        },
        uglify:{
            options:{
                stripBanners:true,
                banner:'/*! <%=pkg.name%>-<%=pkg.version%>.js <%=grunt.template.today("yyyy-MM0-dd") %> */\n'
            },
            build:{
                src:'temp/js/app.js',
                dest:'dist/js/app.min.js'
            }
        },
        watch:{//监听文件变动
            js:{
                files:['src/assets/scripts/*.js'],
                task:['babel']
            },
            css:{
                files:['src/assets/styles/*.scss'],
                task:['sass']
            }
        }
    })
    
    //多目标模式，可以让任务根据配置形成多子任务
    //需要为多目标任务配置目标
    // grunt.registerMultiTask('build',function(){//这里的build对应配置中的build多目标选项
    //     console.log(`target:${this.target},data:${this.data}`)
    // })

    // grunt.loadNpmTasks('grunt-contrib-clean')
    // grunt.loadNpmTasks('grunt-sass')
    loadGruntTasks(grunt)//自动加载所有的Grunt插件中的任务
    grunt.registerTask('default',['clean','sass','babel','uglify','watch'])//
}